Affine 数据迁移到 1Panel 教程

215次阅读
没有评论
内容纲要

导出数据库
```bash
docker exec -t 1Panel-postgresql-yUaf \
pg_dump -Fc -U affine affine \
> affine_full.dump
```
这个命令才对
```bash
docker exec 1Panel-postgresql-yUaf \
pg_dump -Fc -U affine affine \
> /root/affine_full.dump
```

```
scp /root/affine_full.dump hk3:/opt/1panel/apps/affine/
```

导入数据库
```bash
docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump ``` ```bash docker exec -i 1Panel-postgresql-UwJg \ pg_restore -U affine -d affine \ < /opt/1panel/apps/affine/affine_full.dump ``` ```bash root@hh7343277330029:/opt/1panel/apps/affine# ls affine affine_data_full.tar.gz affine_full.dump root@hh7343277330029:/opt/1panel/apps/affine# rm affine_full.dump -rf root@hh7343277330029:/opt/1panel/apps/affine# ls affine affine_data_full.tar.gz affine_full.dump root@hh7343277330029:/opt/1panel/apps/affine# ls -lh 总计 53M drwxr-xr-x 6 root root 4.0K 2月 22 22:11 affine -rw-r--r-- 1 root root 43M 2月 22 22:07 affine_data_full.tar.gz -rw-r--r-- 1 root root 11M 2月 22 22:30 affine_full.dump root@hh7343277330029:/opt/1panel/apps/affine# docker exec -i 1Panel-postgresql-UwJg \ pg_restore -U affine -d affine \ < /opt/1panel/apps/affine/affine_full.dump root@hh7343277330029:/opt/1panel/apps/affine# ``` ``` tar xzvf affine_data_full.tar.gz -C ``` ---- 非常好,你现在这个报错 **已经不是 AFFiNE 的坑了,而是一个标准的 Docker Compose 语法/结构问题**,而且你已经把关键信息全部给出来了 👍 我直接**精确指出你还差哪一步、为什么会报这个错,以及给你一份“可直接用”的 compose**。 --- ## 一、错误的本质(一句话) ```text service "affine" refers to undefined network 1panel-network ``` 👉 **不是 AFFiNE 问题,也不是数据库问题** 👉 **而是你在当前 `docker-compose.yml` 里:** - 使用了 `networks: - 1panel-network` - **但文件中已经没有定义这个 network** --- ## 二、你现在两个 compose 的差异(问题点) ### ✅ 原始的 `docker-compose.yml.bak0`(是对的) ```yaml networks: 1panel-network: external: true ``` 这个声明告诉 Docker: > “这个网络已经存在(由 1Panel 创建),我只是用它”

---

### ❌ 你现在在用的 `docker-compose.yml`(少了这一段)

```yaml
services:
affine:
...
networks:
- 1panel-network
```

但 **没有**:

```yaml
networks:
1panel-network:
external: true
```

👉 所以 Docker 直接报:
**引用了一个不存在的 network**

---

## 三、你现在需要做的「唯一正确修改」

> **保留 network 声明,只删除 migration 相关内容**

### ✅ 正确的 `docker-compose.yml`(完整可用版)

👉 **请你直接整体替换当前文件内容**

```yaml
networks:
1panel-network:
external: true

services:
affine:
container_name: ${CONTAINER_NAME}
image: ghcr.io/toeverything/affine:0.26.2
environment:
- REDIS_SERVER_HOST=${PANEL_REDIS_HOST}
- REDIS_SERVER_PORT=6379
- REDIS_SERVER_PASSWORD=${PANEL_REDIS_ROOT_PASSWORD}
- DATABASE_URL=postgres://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@${PANEL_DB_HOST}:${PANEL_DB_PORT}/${PANEL_DB_NAME}
- AFFINE_INDEXER_ENABLED=false
volumes:
- ./data/storage:/root/.affine/storage
- ./data/config:/root/.affine/config
ports:
- ${PANEL_APP_PORT_HTTP}:3010
networks:
- 1panel-network
restart: unless-stopped
```

📌 **重点只有三条:**

- ✅ 保留 `networks: 1panel-network: external: true`

- ❌ 删除整个 `affine_migration` service

- ❌ 删除 `depends_on`

---

## 四、改完以后你要这样操作(顺序照抄)

```bash
# 1. 确保没有残留容器
docker compose down -v

# 2. 再保险一点(可选)
docker rm -f affine affine_migration_job 2>/dev/null || true

# 3. 启动
docker compose up -d
```

---

## 五、启动成功的“标准结果”

### 1️⃣ 查看容器状态

```bash
docker compose ps
```

你应该看到类似:

```text
affine Up 0.0.0.0:3010->3010/tcp
```

**不应该再看到:**

- `affine_migration_job`

- `Waiting`

- `Starting` 卡住

---

### 2️⃣ 看日志(确认没坑)

```bash
docker logs affine --tail 50
```

正常情况:

- 不再出现 `self-host-predeploy`

- 不再出现 `migration`

- 服务直接启动

---

## 六、为什么这一步是“最后一块拼图”

你现在已经满足 **AFFiNE 迁移成功的全部条件**:

- ✅ 数据库:`pg_dump / pg_restore` 完整恢复

- ✅ `private.key`:原实例一致

- ✅ data 目录:完整覆盖

- ✅ 版本:`0.26.2` 完全一致

- ✅ migration:已正确跳过

- ✅ network:修复完成(这一步)

👉 **再启动不成功,才是“玄学问题”**
但以你现在这个状态,**100% 会起来**

---

## 七、一句话总结(你已经赢了)

> 你不是在“调服务”
> 你是在 **把一个完整的 AFFiNE 实例,原样搬到另一台服务器**

现在这个错误只是:

> **删 migration 时,顺手把 network 声明也删掉了**

补回它,就结束了。

---

正文完
 1